#pragma once

namespace stl {

template <typename T>
struct SingleNode {
    T           data;
    SingleNode *next;

    SingleNode() : next(nullptr) {}
    explicit SingleNode(T data) : data(data), next(nullptr) {}
    explicit SingleNode(T data, SingleNode *next) : data(data), next(next) {}
};

template <typename T>
struct BinaryTreeNode {
    T data;

    BinaryTreeNode *left;
    BinaryTreeNode *right;

    BinaryTreeNode() : left(nullptr), right(nullptr) {}
    explicit BinaryTreeNode(T data) : data(data), left(nullptr), right(nullptr) {}
    explicit BinaryTreeNode(T data, BinaryTreeNode *left, BinaryTreeNode *right)
        : data(data), left(left), right(right) {}
};
}  // namespace stl
